【IT168 专稿】Microsoft Visual Studio Team System集成了多种功能,这些功能用于创建高质量代码。其中一项功能用于实现单元编码测试。并在Microsoft ASP.NET内部运行测试代码。在本文中,首先从测试驱动开发技术开始讲解,因为这是敏捷开发人员所提倡的重点。
上一篇:使用VS Team Edition进行单元测试
·预期的错误
在某些测试中,开发人员可能需要提供一些错误条件。所以,可以标注测试方法为ExpectedException属性,并设定为预期的异常类型。在如下示例中,即使抛出DivideByZeroException异常,测试也能通过。
[TestClass]
public class UnitTests
{
[TestMethod]
[ExpectedException(typeof(DivideByZeroException))]
public void DivideTest()
{
int x = 1; int y = 0;
MyUtils.Calc.Divide(x, y);
}
}
public class UnitTests
{
[TestMethod]
[ExpectedException(typeof(DivideByZeroException))]
public void DivideTest()
{
int x = 1; int y = 0;
MyUtils.Calc.Divide(x, y);
}
}
·数据驱动测试
为了彻底测试,并保证代码的完全覆盖率,尤其是测试所有边缘条件,有时候需要使用不同的输入参数和对同一段代码进行反复测试,以及针对不同的返回值的测试。除了编写每一种不同情况的测试代码之外,测试框架还能从数据库获取不同的测试参数。这种方法称为数据驱动测试。采用如下SQL脚本对建立名为TestData的Microsoft SQL Server Express Edition数据库,之后再将其清除。TestData数据库包含用于数据驱动测试的数据。
-- create.sql
USE master
GO
DROP DATABASE TestData
GO
CREATE DATABASE TestData
GO
use TestData
GO
CREATE TABLE CalcTestData
(
x int NOT NULL,
y int NOT NULL,
expected int NOT NULL,
shouldpass bit NOT NULL
)
GO
INSERT INTO CalcTestData (x, y, expected, shouldpass)
values (1, 1, 2, 1)
INSERT INTO CalcTestData (x, y, expected, shouldpass)
values (1, 2, 1, 0)
GO
-- destroy.sql
USE master
GO
DROP DATABASE TestData
GO
USE master
GO
DROP DATABASE TestData
GO
CREATE DATABASE TestData
GO
use TestData
GO
CREATE TABLE CalcTestData
(
x int NOT NULL,
y int NOT NULL,
expected int NOT NULL,
shouldpass bit NOT NULL
)
GO
INSERT INTO CalcTestData (x, y, expected, shouldpass)
values (1, 1, 2, 1)
INSERT INTO CalcTestData (x, y, expected, shouldpass)
values (1, 2, 1, 0)
GO
-- destroy.sql
USE master
GO
DROP DATABASE TestData
GO
同样使用如下命令脚本执行上述SQL脚本。这些命令脚本从测试运行配置的“Setup And Cleanup Scripts”选项卡引用,所以它们可以在测试运行之前/后执行。
rem create.cmd
sqlcmd -S .\SQLExpress -i create.sql
rem destroy.cmd
sqlcmd -S .\SQLExpress -i destroy.sql
sqlcmd -S .\SQLExpress -i create.sql
rem destroy.cmd
sqlcmd -S .\SQLExpress -i destroy.sql